#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
提示词调试器演示脚本
展示如何在开发环境中测试和调试提示词
"""

import sys
import os
import asyncio

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", ".."))

from src.research_core.prompt_debugger import create_prompt_debugger


def demo_prompt_testing():
    """演示提示词测试功能"""
    print("=== 提示词测试功能演示 ===\n")
    
    # 创建调试器实例
    debugger = create_prompt_debugger()
    
    # 定义测试提示词
    prompt = """你是一位Python编程专家，请按照以下要求编写代码：
    1. 目标：计算斐波那契数列
    2. 要求：
       - 使用递归方法实现
       - 包含适当的注释说明逻辑
       - 添加输入验证
    3. 输出格式：提供完整的可运行代码
    4. 示例：
       输入：n=5
       输出：[0, 1, 1, 2, 3, 5]"""
    
    requirement = "需要一个能够帮助用户写Python代码的AI助手提示词，要求提供清晰、可运行的代码示例，并包含适当的注释解释代码逻辑。"
    
    print("1. 测试单个提示词:")
    print(f"   提示词: {prompt[:100]}...")
    print(f"   需求: {requirement}")
    
    # 执行测试
    test_result = debugger.test_prompt(prompt, requirement)
    
    # 显示结果
    print(f"   基础评分: {test_result['basic_score']}")
    advanced_eval = test_result['advanced_evaluation']
    print(f"   综合评分: {advanced_eval['overall_score']}")
    print(f"   清晰度: {advanced_eval['clarity']}")
    print(f"   完整性: {advanced_eval['completeness']}")
    print(f"   具体性: {advanced_eval['specificity']}")
    print(f"   相关性: {advanced_eval['relevance']}")
    print(f"   结构化: {advanced_eval['structuredness']}")
    print(f"   执行时间: {test_result['execution_time']:.2f}秒")
    print()


def demo_prompt_comparison():
    """演示提示词比较功能"""
    print("=== 提示词比较功能演示 ===\n")
    
    # 创建调试器实例
    debugger = create_prompt_debugger()
    
    # 定义不同的提示词版本
    prompts = [
        # 版本1：简单提示词
        "写一个Python函数来计算斐波那契数列。",
        
        # 版本2：结构化提示词
        """你是一个Python编程专家，请按照以下要求编写代码：
        1. 目标：计算斐波那契数列
        2. 要求：
           - 使用递归方法实现
           - 包含适当的注释说明逻辑
           - 添加输入验证
        3. 输出格式：提供完整的可运行代码""",
        
        # 版本3：详细提示词
        """作为一位资深的Python程序员，请编写一个函数来计算斐波那契数列。
        
        具体要求如下：
        1. 功能要求：
           - 实现一个名为fibonacci的函数
           - 接受一个整数参数n，表示要计算到第几项
           - 返回一个包含斐波那契数列的列表
        
        2. 技术要求：
           - 使用递归算法实现
           - 添加输入参数验证，确保n为非负整数
           - 包含异常处理机制
           - 添加详细的中文注释说明算法逻辑
        
        3. 输出要求：
           - 返回完整的可执行代码
           - 代码应遵循PEP8规范
           - 包含简单的测试用例
        
        请严格按照以上要求编写代码。"""
    ]
    
    requirement = "我需要一个能够帮助用户写Python代码的AI助手提示词，要求提供清晰、可运行的代码示例，并包含适当的注释解释代码逻辑。"
    
    # 定义测试用例
    test_inputs = [
        {"input": "计算斐波那契数列的前10项", "expected": "包含10个数字的列表"},
        {"input": "生成斐波那契数列，直到值超过100", "expected": "动态长度的列表"}
    ]
    
    print("1. 比较多个提示词版本:")
    for i, prompt in enumerate(prompts, 1):
        print(f"   版本{i}: {prompt[:50]}...")
    
    print(f"   需求: {requirement}")
    print(f"   测试用例数: {len(test_inputs)}")
    
    # 执行比较
    comparison_result = debugger.compare_prompts(prompts, requirement, test_inputs)
    
    # 显示结果
    if "error" in comparison_result:
        print(f"   比较失败: {comparison_result['error']}")
        return
    
    ab_results = comparison_result['ab_test_results']
    variants = ab_results.get('variants', {})
    
    print("\n   各版本测试结果:")
    for variant_name, variant_data in variants.items():
        print(f"     {variant_name}:")
        print(f"       综合得分: {variant_data['overall_score']:.2f}")
        variant_results = variant_data['results']
        if 'accuracy' in variant_results:
            print(f"       准确性: {variant_results['accuracy']:.2f}")
        if 'consistency' in variant_results:
            print(f"       一致性: {variant_results['consistency']:.2f}")
        if 'efficiency' in variant_results:
            print(f"       效率: {variant_results['efficiency']:.2f}")
    
    best_variant = ab_results.get('best_variant', 'N/A')
    print(f"\n   最佳版本: {best_variant}")
    print()


def demo_interactive_debugging():
    """演示交互式调试功能"""
    print("=== 交互式调试功能演示 ===\n")
    
    # 创建调试器实例
    debugger = create_prompt_debugger()
    
    # 定义需要调试的提示词
    prompt = "写代码计算斐波那契数列"
    requirement = "需要一个计算斐波那契数列的Python函数"
    
    print("1. 交互式调试提示词:")
    print(f"   提示词: {prompt}")
    print(f"   需求: {requirement}")
    
    # 执行交互式调试
    debug_result = debugger.interactive_debug(prompt, requirement)
    
    # 显示结果
    test_result = debug_result['test_result']
    advanced_eval = test_result['advanced_evaluation']
    
    print(f"   综合评分: {advanced_eval['overall_score']}")
    print(f"   各项评分:")
    print(f"     - 清晰度: {advanced_eval['clarity']}")
    print(f"     - 完整性: {advanced_eval['completeness']}")
    print(f"     - 具体性: {advanced_eval['specificity']}")
    print(f"     - 相关性: {advanced_eval['relevance']}")
    print(f"     - 结构化: {advanced_eval['structuredness']}")
    
    print(f"\n   调试建议:")
    for i, suggestion in enumerate(debug_result['debug_suggestions'], 1):
        print(f"     {i}. {suggestion}")
    print()


def demo_test_history():
    """演示测试历史功能"""
    print("=== 测试历史功能演示 ===\n")
    
    # 创建调试器实例
    debugger = create_prompt_debugger()
    
    # 执行几个测试
    prompt1 = "写一个Python函数来计算斐波那契数列。"
    prompt2 = """你是一个Python编程专家，请按照以下要求编写代码：
    1. 目标：计算斐波那契数列"""
    
    debugger.test_prompt(prompt1, "测试需求1")
    debugger.test_prompt(prompt2, "测试需求2")
    
    # 获取测试历史
    history = debugger.get_test_history()
    
    print("1. 测试历史记录:")
    print(f"   总测试次数: {len(history)}")
    for i, record in enumerate(history, 1):
        print(f"   记录{i}:")
        print(f"     提示词: {record['prompt'][:50]}...")
        print(f"     综合评分: {record['advanced_evaluation']['overall_score']}")
        print(f"     测试时间: {record['test_timestamp']}")
    print()


def demo_save_load():
    """演示保存和加载功能"""
    print("=== 保存和加载功能演示 ===\n")
    
    # 创建调试器实例
    debugger = create_prompt_debugger()
    
    # 执行测试
    prompt = "写一个Python函数来计算斐波那契数列。"
    requirement = "需要一个计算斐波那契数列的Python函数"
    
    test_result = debugger.test_prompt(prompt, requirement)
    
    # 保存测试结果
    save_path = "test_results/prompt_test_result.json"
    success = debugger.save_test_result(test_result, save_path)
    
    print("1. 保存测试结果:")
    print(f"   提示词: {prompt}")
    print(f"   保存路径: {save_path}")
    print(f"   保存结果: {'成功' if success else '失败'}")
    
    # 加载测试结果
    if success:
        loaded_result = debugger.load_test_result(save_path)
        print("\n2. 加载测试结果:")
        if loaded_result:
            print(f"   加载成功")
            print(f"   综合评分: {loaded_result['advanced_evaluation']['overall_score']}")
        else:
            print(f"   加载失败")
    print()


async def main():
    """主函数"""
    print("提示词调试器功能演示")
    print("=" * 50)
    
    demo_prompt_testing()
    print("\n" + "=" * 50 + "\n")
    
    demo_prompt_comparison()
    print("\n" + "=" * 50 + "\n")
    
    demo_interactive_debugging()
    print("\n" + "=" * 50 + "\n")
    
    demo_test_history()
    print("\n" + "=" * 50 + "\n")
    
    demo_save_load()


if __name__ == "__main__":
    asyncio.run(main())